home *** CD-ROM | disk | FTP | other *** search
/ EnigmA Amiga Run 1996 June / EnigmA AMIGA RUN 08 (1996)(G.R. Edizioni)(IT)[!][issue 1996-06][EARSAN CD VII].iso / earcd / arexx / trxtlsr3.lha / Others / Hunt.rexx < prev   
OS/2 REXX Batch file  |  1996-05-07  |  11KB  |  393 lines

  1. /*
  2.    $VER: Hunt.rexx 1.0 (27.4.96) Copyright (c) Nils Görs.
  3.  
  4.  
  5.    Funktionsbeschreibung:
  6.  
  7.     Sucht mittels GREP, in einer Textdatei einen Text und gibt passende
  8.     Einträge in einem ListView-Fenster aus.
  9.     Ich verwende das Skript um vor einem Download zu überprüfen, ob ich
  10.     das Archiv vielleicht schon einmal gesaugt habe oder um in einer 2MB
  11.     Aminet-CD-Datei ein File zu finden ;-)
  12.  
  13.  
  14.    Autor dieses Skripts:
  15.  
  16.        Nils Görs              Tel. : +49 (0)202 784258
  17.        Kaiserstr. 97a         EMail: N.Goers@Art-Line.de
  18.        42329 Wuppertal          oder über das ZP-Support-Brett.
  19.  
  20.    Verwenden Sie bitte nach Möglichkeit elektronische Post!
  21.  
  22.  
  23.   Installation (DOPUS4.12):
  24.   =========================
  25.    AmigaDOS    rx Hunt.rexx {p} {O}
  26.  
  27.    Flags: Do all Files
  28.           No filename quote
  29.           Run asynchronously
  30.  
  31.   Erstellen Sie bitte eine Datei (PROGDIR:Hunt.base) mit den Pfaden und
  32.   Filenamen der Listen, in denen Sie etwas suchen möchten.
  33.  
  34. */
  35.  
  36. Grep  = "c:grep"
  37. OutputFile = "t:GrepOut"
  38.  
  39. OPTIONS RESULTS
  40.  
  41. PARSE ARG PubScreen SearchFor
  42.  
  43. IF PubScreen == "?" THEN DO
  44.  OPTIONS PROMPT "PUBSCREEN/K,HUNTFOR/K: "
  45.  PARSE PULL PubScreen SearchFor
  46. END
  47.  
  48. SearchFor=DELSTR(Searchfor,1,1)
  49.  
  50. CALL _InitAll
  51.  
  52. /*
  53. ** Beschreibung der Applikation
  54. */
  55. appname     = 'Hunt'
  56. applongname = 'Hunt - ©1996 by Nils Görs'
  57. appinfo     = 'suchen innerhalb einer Datei.'
  58. appversion  = '1.0'
  59. apprelease  = '1'
  60. appdate     = '26.4.96'
  61.  
  62. _maintags:
  63. windowtags = WindowID(1),
  64.              PubScreenName(PubScreen),
  65.              WindowBackfillFB,
  66.              WindowTitle(appname appversion),
  67.              BeginMenu('Project'),
  68.              MenuItem('C_ChangePubScreen',10),
  69.              MenuItem('Q_Quit',11),
  70.              BeginMenu('Actions'),
  71.              MenuItem('O_Open searchfile...',12),
  72.              MenuItem('S_change seachfile...',13),
  73.              'HorizGroupA Space VertGroupA Space',
  74.                'BeginLine',
  75.                  Text3('_Suchen nach:') 'TRAT_ID 2',
  76.                  StringGadget(SearchFor,2) 'TRAT_Value 1000',
  77.                  GetEntryButton(3),
  78.                'Endline',
  79.                 'SpaceS',
  80.                 ListRO('Files',1,0),
  81.                 'SpaceS',
  82.                   ClippedTextBox("",3),
  83.                   ClippedTextBox("Liste:" Suchliste,4),
  84.              'Space EndGroup Space EndGroup EndProject'
  85. /*
  86. ** Unterbrechungssignale
  87. */
  88.  
  89. SIGNAL ON break_c
  90. SIGNAL ON failure
  91. SIGNAL ON halt
  92. SIGNAL ON ioerr
  93. SIGNAL ON syntax
  94.  
  95. app = TR_CREATEAPP('TRCA_Name'     '"'appname'"',
  96.                    'TRCA_LongName' '"'applongname'"',
  97.                    'TRCA_Info'     '"'appinfo'"',
  98.                    'TRCA_Version'  '"'appversion'"',
  99.                    'TRCA_Release'  '"'apprelease'"',
  100.                    'TRCA_Date'     '"'appdate'"',
  101.                    'TAG_END')
  102.  
  103. IF app ~= '00000000'x THEN DO
  104.  
  105.    window = TR_OPENPROJECT(app,windowtags)
  106.    WindowProject=C2D(window) /* zum Locken des Fensters bei About */
  107.  
  108. IF SearchFor == "" THEN CALL TR_SendMessage(Window,2,'TROM_ACTIVATE',0)
  109.                    ELSE CALL _StartSearch
  110.  
  111.    IF window ~= '00000000'x THEN DO
  112.       nummer = 0
  113.  
  114.       DO WHILE nummer = 0
  115.          CALL TR_WAIT(app,'')
  116.  
  117.          DO WHILE TR_HANDLEMSG(app,'event')
  118.  
  119. /******************
  120. *** CLOSEGADGET ***
  121. *******************/
  122.             IF event.trm_class = 'TRMS_CLOSEWINDOW' THEN nummer = -1
  123.  
  124. /*************
  125. *** GAGDET ***
  126. **************/
  127.           IF event.trm_class = 'TRMS_ACTION' THEN DO
  128.            SELECT
  129.                 WHEN event.trm_id  == 10 THEN CALL _NewPubScreen
  130.                 WHEN event.trm_id  == 11 THEN DO
  131.                     Quit=TR_EasyRequest(app,"Really Quit?",,
  132.                                         "Yes|No","TREZ_Title Quit TREZ_LockProject" WindowProject)
  133.                     IF Quit == 1 THEN nummer=1
  134.                 END
  135.                 WHEN event.trm_id  == 12 THEN DO
  136.                      bool = ASL_RequestFile(window,NeueListe,,
  137.                                   "ASLFR_PubScreenName" PubScreen,
  138.                                   "ASLFR_TitleText" '"Select new file to search in"')
  139.                      IF bool ~= 0 THEN DO
  140.                       Suchliste=neueliste.1
  141.                       CALL TR_SETATTRIBUTE(window,4,'TRAT_TEXT',"Liste:" Suchliste)
  142.                      END
  143.                      CALL TR_SendMessage(Window,2,'TROM_ACTIVATE',0)
  144.                 END
  145.         WHEN event.trm_id == 13 THEN CALL _ChangeSearchList
  146.                 WHEN event.trm_id == 2 THEN CALL _StartSearch
  147.                 WHEN event.trm_id == 3 THEN DO
  148.                     CALL TR_SETATTRIBUTE(window,2,'TROB_String','')
  149.                     CALL TR_SendMessage(Window,2,'TROM_ACTIVATE',0)
  150.                 END
  151.            OTHERWISE
  152.            NOP
  153.            END
  154.           END
  155. /****************
  156.  *** Tastatur ***
  157.  ****************/
  158.             IF event.trm_class = 'TRMS_KEYPRESSED' THEN DO
  159.              IF event.trm_data == 13 THEN DO
  160.                searchfor = TR_GETATTRIBUTE(window,2,'TROB_String')
  161.               SELECT
  162.               WHEN searchfor = "" THEN CALL TR_SendMessage(Window,2,'TROM_ACTIVATE',0)
  163.               OTHERWISE
  164.               CALL _StartSearch
  165.               END
  166.              END
  167.             END
  168.  
  169.  
  170. /* */
  171.          END
  172.       END
  173.       CALL TR_CLOSEPROJECT(window)
  174.    END
  175.    CALL TR_DELETEAPP(app)
  176. END
  177. EXIT(0)
  178.  
  179. _StartSearch:
  180. IF Searchfor == Searchfor.bak THEN DO
  181.   IF NeueListe.0 ~= 1 THEN RETURN
  182.    ELSE NeueListe.0 = 0
  183. END
  184.  
  185. SearchFor2.1 = TRANSLATE(SearchFor,'0a'x," ")
  186. SearchFor2.0 = 1
  187.  
  188. CALL RXTR_WRITEFILE('t:SearchForF',Searchfor2)
  189.  
  190. CALL TR_LOCKPROJECT(window)
  191. ADDRESS COMMAND Grep "-i -f t:"SearchForF Suchliste ">"OutputFile
  192. FoundResult = (rc)
  193. CALL TR_UNLOCKPROJECT(window)
  194.  
  195.  
  196. IF FoundResult == 1 THEN DO
  197.  StatusText = "Nichts gefunden!"
  198.  files.0 = 0
  199. END
  200. ELSE DO
  201.  CALL RXTR_READFILE(OutPutFile,Files)
  202.  StatusText = files.0 "passen auf Suchmuster."
  203.  
  204. END
  205.  
  206. ADDRESS COMMAND "delete" OutputFile "QUIET"
  207. ADDRESS COMMAND "delete t:SearchForF QUIET"
  208. CALL TR_SETATTRIBUTE(window,1,'TROB_ListView',Files)
  209. CALL TR_SETATTRIBUTE(window,3,'TRAT_TEXT',StatusText)
  210.  
  211. Searchfor.bak = Searchfor
  212. RETURN
  213.  
  214. _InitAll:
  215. NL      = '0a'x
  216. TRUE    = 1
  217. FALSE   = 0
  218. Files.0 = 0
  219.  
  220.    /*
  221.    ** Open libs
  222.    */
  223.  
  224.    IF ~SHOW('LIBRARIES','tritonrexx.library') THEN
  225.       IF ~ADDLIB('tritonrexx.library',10,-30,0) THEN
  226.          quit('Cannot open tritonrexx.library!',10)
  227.  
  228.    IF ~SHOW(LIBRARIES,'rexxtricks.library') THEN
  229.       IF ~ADDLIB('rexxtricks.library',9,-30,38) THEN
  230.          quit('Cannot open rexxtricks.library!',10)
  231.  
  232.    IF ~SHOW('LIBRARIES','rexxsupport.library') THEN
  233.       IF ~ADDLIB('rexxsupport.library',9,-30,0) THEN
  234.          quit('Cannot open rexxsupport.library!',10)
  235.  
  236.    /*
  237.    ** Set current dir
  238.    */
  239.  
  240.    PARSE SOURCE . . . script .
  241.    progdir = PATHPART(script)
  242.  
  243.    booll = LENGTH(progdir)
  244.    booli= LASTPOS(":",progdir)
  245.    boolh= LASTPOS("/",progdir)
  246.  
  247.   IF booli <= booll THEN progdir2=progdir||"/"
  248.   IF boolh == 0 THEN progdir2=progdir||"/"
  249.  
  250.    CALL PRAGMA('D',progdir)
  251.  
  252. /* Gibt es einen Parameter für den Bildschirm. Wenn nicht, dann wird
  253.    der Screen auf dem defaultPubScreen geöffnet. */
  254.  
  255. IF PubScreen == "" THEN
  256.    PubScreen = RXTR_GETDEFAULTPUBSCREEN()
  257. CALL RXTR_PUBSCREENTOFRONT(PubScreen)
  258.  
  259. IF RXTR_READFILE(progdir||"/Hunt.base",SearchListBase) == 0 THEN DO
  260.  say "Konnte" progdir||"/Hunt.base nicht finden!"
  261.  EXIT(5)
  262. END
  263. SuchListe = SearchListBase.1
  264. RETURN
  265.  
  266. /*******************************************************************
  267.  ***  Routine, die das GUI auf einem neuen PubScreen öffnen läßt ***
  268.  *******************************************************************/
  269. _NewPubScreen:
  270. IF PUBSCREENLIST('ScreenList') == 0 THEN RETURN
  271.  
  272. delstart=LSEARCH(PubScreen,Screenlist)
  273. IF delstart ~= -1 THEN RXTR_STEMREMOVE(ScreenList,delstart)
  274.  
  275. ScreenListTags = WindowID(2),
  276.    WindowBackfillFB,
  277.    WindowPosition('TRWP_MOUSEPOINTER'),
  278.    WindowTitle('ChangePubScreen'),
  279.    WindowFlags('TRWF_NOCLOSEGADGET|TRWF_NOESCCLOSE'),
  280.    PubScreenName(Pubscreen),
  281.    'VertGroupA',
  282.       'Space',
  283.       'HorizGroupA',
  284.          'Space',
  285.          ListSel('screenlist',301,0),
  286.          'Space',
  287.       'EndGroup',
  288.       'Space',
  289.       'HorizSeparator',
  290.       'Space',
  291.       'HorizGroupA',
  292.       'Space',
  293.       ButtonRE('Cancel',302),
  294.       'Space',
  295.    'EndGroup Space EndGroup EndGroup EndProject'
  296.  
  297.     PubScreenProject = TR_OPENPROJECT(app,Screenlisttags)
  298.  
  299.   IF PubScreenProject ~= '00000000'x THEN DO
  300.     CALL TR_LOCKPROJECT(window)
  301.  
  302.       DO WHILE ende ~= 1
  303.          DO WHILE TR_HANDLEMSG(app,'event2')
  304.             IF event2.trm_class = 'TRMS_ACTION' THEN ende = 1 /* Cancel Gadget */
  305.  
  306.             IF event2.trm_class = 'TRMS_NEWVALUE' THEN DO
  307.             nummer = TR_GETATTRIBUTE(PubScreenProject,301,'TRAT_Value')+1
  308.               PubScreen = ScreenList.nummer
  309.               CALL TR_UNLOCKPROJECT(window)
  310.               CALL TR_CLOSEPROJECT(PubScreenProject)
  311.               CALL TR_CLOSEPROJECT(window)
  312.               CALL TR_DELETEAPP(app)
  313.               CALL RXTR_PUBSCREENTOFRONT(PubScreen)
  314.               fromNewPub=1
  315.           CALL _MainTags
  316.             END
  317.          END
  318.       END
  319.  
  320.    ende = 0
  321.     CALL TR_UNLOCKPROJECT(window)
  322.     CALL TR_CLOSEPROJECT(PubScreenProject)
  323. END
  324. RETURN
  325.  
  326. /*************************************************
  327. ** Listview zum auswählen einer neuen Suchliste **
  328. **************************************************/
  329. _ChangeSearchList:
  330. SearchListTags = WindowID(3),
  331.    WindowBackfillFB,
  332.    WindowPosition('TRWP_MOUSEPOINTER'),
  333.    WindowTitle('ChangeSearchList'),
  334.    WindowFlags('TRWF_NOCLOSEGADGET|TRWF_NOESCCLOSE'),
  335.    PubScreenName(Pubscreen),
  336.    'VertGroupA',
  337.       'Space',
  338.       'HorizGroupA',
  339.          'Space',
  340.          ListSel('SearchListBase',401,0),
  341.          'Space',
  342.       'EndGroup',
  343.       'Space',
  344.       'HorizSeparator',
  345.       'Space',
  346.       'HorizGroupA',
  347.       'Space',
  348.       ButtonRE('Cancel',402),
  349.       'Space',
  350.    'EndGroup Space EndGroup EndGroup EndProject'
  351.  
  352.   SearchListProject = TR_OPENPROJECT(app,SearchListtags)
  353.  
  354.   IF SearchListProject ~= '00000000'x THEN DO
  355.     CALL TR_LOCKPROJECT(window)
  356.  
  357.       DO WHILE ende ~= 1
  358.          DO WHILE TR_HANDLEMSG(app,'event3')
  359.             IF event3.trm_class = 'TRMS_ACTION' THEN ende = 1 /* Cancel Gadget */
  360.              IF event3.trm_class = 'TRMS_NEWVALUE' THEN DO
  361.               nummerngirl = TR_GETATTRIBUTE(SearchListProject,401,'TRAT_Value')+1
  362.               SuchListe  = SearchListBase.nummerngirl
  363.               NeueListe.0 = 1
  364.               ende = 1
  365.               CALL TR_SETATTRIBUTE(window,4,'TRAT_TEXT',"Liste:" Suchliste)
  366.              END
  367.          END
  368.       END
  369.   END
  370.     ende=0
  371.     CALL TR_UNLOCKPROJECT(window)
  372.     CALL TR_CLOSEPROJECT(SearchListProject)
  373.     CALL TR_SendMessage(Window,2,'TROM_ACTIVATE',0)
  374. RETURN
  375.  
  376. /*******************************************************************************
  377. ** Routine, die bei einer Unterbrechung des Scripts aufgerufen wird
  378. *******************************************************************************/
  379.  
  380. break_c:
  381. failure:
  382. halt:
  383. ioerr:
  384. syntax:
  385.    SAY '+++ Fehler' rc 'in Zeile' sigl '-' ERRORTEXT(rc)
  386.    SAY SOURCELINE(sigl)
  387.  
  388.    IF app ~= '00000000'x THEN
  389.       CALL TR_DELETEAPP(app)
  390.  
  391.    EXIT(10)
  392. /*EOS*/
  393.